package com.xtwy.spike.service.impl;

import com.xtwy.spike.entity.RedPacket;
import com.xtwy.spike.mapper.RedPacketMapper;
import com.xtwy.spike.service.RedPacketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * 类的描述：
 *
 * @作者: 侯建军
 * @邮箱: 474177818@qq.com
 * @博客: https://blog.csdn.net/marquis888
 * @创建日期: 2018年12月02日  21:58
 * @版本: v1.0
 * @jdk版本使用: JDK1.8
 */
@Service
public class RedPacketServiceImpl implements RedPacketService {

    @Autowired
    private RedPacketMapper redPacketMapper;
//    配置了事务注解＠Transactional ， 让程序能够在事务中运行，以保证数据的一致性 ，
//    这里采用的是读／写提交的隔离级别 ， 之所以不采用更高的级别， 主要是提高数据库的并发能力，
//    而对于传播行为则采用 Propagation.REQUIRED，这样调用这个方法的时候，如果没有事务则会创建事务，
//    如果有事务则沿用当前事务。
    @Override
    @Transactional(isolation= Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)
    public RedPacket getRedPacket(Long id) {
        return redPacketMapper.getRedPacket(id);
    }

    @Override
    @Transactional(isolation=Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)
    public int decreaseRedPacket(Long id) {
        return redPacketMapper.decreaseRedPacket(id);
    }
}
